iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 14
0
IoT

從開源kubernetes雲端運算到kubeedge雲邊協同系列 第 14

Day 14 KubeEdge與Service應用(使用NodePort)

  • 分享至 

  • xImage
  •  

今天我們一樣要用Service去提供Pod的服務,但是我們宣告為NodePort的方式而非Cluster-IP。
在開始之前一樣先附上我的叢集節點:

從圖中可以清楚看到,k8s-node01、k8s-node02的加入規則是透過kubernetes加入的;edge、raspberrypi是透過KubeEdge加入的,且他們是邊緣節點。

和前幾天提到的一樣,NodePort和Cluster-IP最大的不同是NodePort可以對叢集外提供服務,在Service上也一樣。首先我們先在Kubernetes下做測試:

# k8s-nginx-deploy-nodeport.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: k8s-nginx-deploy
  namespace: default
  labels:
    app: k8s-nginx-deploy
spec:
  replicas: 3
  selector:
    matchLabels:
      app: k8s-nginx-deploy
  template:
    metadata:
      labels:
        app: k8s-nginx-deploy
    spec:
      containers:
      - image: nginx:latest
        name: nginx
        ports:
        - containerPort: 80
      nodeSelector:
        name: k8s-node02
---
apiVersion: v1
kind: Service
metadata:
  name: k8s-nginx-service
spec:
  type: NodePort
  selector:
    app: k8s-nginx-deploy
  ports:
    - name: http
      port: 7777
      targetPort: 80
      protocol: TCP

kubectl apply -f k8s-nginx-deploy-nodeport.yaml

檢查一下部署狀態


我們可以用幾種方法存取到NGINX:

  1. Cluster-ip
    我們仍然可以透過cluster-ip存取到NGINX:

    一樣是用get service時取得的cluster-ip加上我們在YAML中指定的port 7777。
  2. NodePort

    透過NodePort存取的話一樣是用節點IP加上30182(從get service中查到的),

    因為我們在YAML中沒有指定要使用的port,在分配NodePort的Port時,Kubernetes預設會分配30000以上的port給你。
    也可以透過另一個叢集中節點取得連線:

    但可惜的是不能從KubeEdge節點上進行連線:

    相信大家看到這裡應該能猜到結果了吧,不過秉持實驗的精神我們還是繼續測試看看:
# edge-nginx-deploy-nodeport.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: kubeedge-nginx-deploy
  namespace: default
  labels:
    app: kubeedge-nginx-deploy
spec:
  replicas: 3
  selector:
    matchLabels:
      app: kubeedge-nginx-deploy
  template:
    metadata:
      labels:
        app: kubeedge-nginx-deploy
    spec:
      containers:
      - image: nginx:latest
        name: nginx
        ports:
        - containerPort: 80
      nodeSelector:
        name: edge
---
apiVersion: v1
kind: Service
metadata:
  name: kubeedge-nginx-service
spec:
  type: NodePort
  selector:
    app: kubeedge-nginx-deploy
  ports:
    - name: http
      port: 6666
      targetPort: 80
      protocol: TCP
kubectl apply -f edge-nginx-deploy-nodeport.yaml

使用上面的YAML檔在edge上佈署NGINX服務。


確定service與Pod正確佈署後連線看看:

  1. 透過cluster-ip進行連線
  2. 透過NodePort進行連線

    可以發現不論向Kubernetes節點上要求連線或是向KubeEdge節點要求連線都不行。
    所以簡單整理一下,KubeEdge(v1.4)是沒辦法支援Service服務的,不論是宣告為cluster-ip或者NodePort都不行。

上一篇
Day 13: KubeEdge與Service(使用cluster-ip)
下一篇
Day 15 KubeEdge 服務滾動更新
系列文
從開源kubernetes雲端運算到kubeedge雲邊協同30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言